<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Booth extends CI_Controller 
{	
	private $_data;
		
  	function __construct()
  	{
  		parent::__construct();
  	    $this->load->model(array('boothmodel', 'ratemodel', 'booth_product_comment_model', 'eventmodel'));
  		
  	    if ($this->router->method != 'index' 
  	      AND $this->router->method != 'view'
  	      AND $this->router->method != 'detail') {
            if(!isset($_SESSION['userLoggedIn'])) {
                redirect();
            }
        }
  	}
  	  	
  	/**
  	 * Hiển thị danh sách tất cả các gian hàng
  	 * 
  	 * @param int $page 
  	 * @param boolean $isAjax
  	 * @param int $categoryId 
  	 */
	public function index($page = 0, $isAjax = FALSE, $categoryId = NULL)
	{
	    $this->load->helper('frontend');
	    $this->load->helper('booth');
	    
        if($categoryId) {
            $data['booths'] = $this->boothmodel->getBoothsByCategoryId(18, $page * 18, $categoryId);
        } else {
            $data['booths'] = $this->boothmodel->getBooths(18, $page * 18);
        }
        
        // Thiết lập cờ hiển thị thêm cho danh sách đã tồn tại là true
        if ($page) {
            $data['extra'] = true;
        }
        
        if ($isAjax) { // Hiển thị danh sách qua việc click vào các danh mục
            $this->load->view('booth/index', $data);
        } else { // Link trực để tiếp hiển thị danh sách
            $this->_data['content'] = $this->load->view('booth/index', $data, true);
            $this->load->view('layout/frontend/index', $this->_data);
        }
	}
	
	/**
	 * Trang hiển thị chi tiết một gian hàng
	 */
	public function view()
	{
	    $this->load->helper('frontend');
	    $this->load->helper('booth');
	    $this->load->model('booth_products_model');
	    $this->load->model('booth_product_categories_model');
	  
        $slug = str_replace('/gian-hang/', '', $_SERVER['REQUEST_URI']);
        $data['booth'] = $this->boothmodel->getBoothBySlug($slug);
        
        if($data['booth']) {    
            $booth_id = $data['booth']['id'];
            $data['booth_products'] = $this->boothmodel->getProductsByBoothId($booth_id);
            $data['tree_booth_product_categories'] = $this->booth_product_categories_model->getTreeBoothProductCategories($booth_id);
            $data['special_products'] = $this->booth_products_model->getListSpecialProducts($booth_id);
          
            $this->_data['content'] = $this->load->view('booth/view', $data, true);
            $this->load->view('layout/frontend/index', $this->_data);
        } else {
            echo 'Gian hàng không tồn tại trong hệ thống hoặc đã bị xóa.';
        }
	}
	
	public function detail($booth_slug, $booth_product_slug)
	{
        $this->load->helper('frontend');
        $this->load->helper('user_helper');
        $this->load->helper('booth');
        
        // Kiểm tra xem người dùng đã đăng nhập hay chưa
        if (!isset($_SESSION['userLoggedIn'])) {
            $data['not_login'] = 1;
        }

        $data['booth'] = $this->boothmodel->getBoothBySlug($booth_slug);
        $data['booth_product'] = $this->boothmodel->getProductBySlug($booth_product_slug);
        if (isset($data['booth_product']['id']) && $data['booth_product']['id'] != "") {
            $rated_id = $data['booth_product']['id'];
            // Kiểm tra xem người dùng đã rate cho sản phẩm này chưa
            if (isset($_SESSION['userLoggedIn'])) {
                $data['rate'] = $this->ratemodel->getRateByUserIdAndRatedIdAndType((int) $_SESSION['userLoggedIn']['id'], $rated_id, 4);
                if (isset($data['rate']['id']) && $data['rate']['id'] != "") {
                    $data['rated'] = 1;
                }
            }
            // Lấy danh sách các comment
            $data['comment'] = $this->booth_product_comment_model->getCommentByBoothProductId($data['booth_product']['id'], 0, 10);
            if (count($data['comment']) == 0) {
                $data['check_comment'] = 0;
            }
        }
        $this->load->view('booth/detail', $data);
	}
	
	
  	/* add booth */
	public function add()
	{   
	    $this->load->helper('frontend');
	    $this->load->helper('booth');
	  	$this->load->library(array('form_validation'));
	  	$this->load->model('booth_product_categories_model');
	  	$this->load->model('booth_products_model');

  		$data['booth'] = $this->boothmodel->getBoothByUserId((int) $_SESSION['userLoggedIn']['id']);
  		
	    if ($data['booth']) { // edit
	        $booth_id = $data['booth']['id'];
	        $data['tree_booth_product_categories'] = $this->booth_product_categories_model->getTreeBoothProductCategories($booth_id);
	        $data['special_products'] = $this->booth_products_model->getListSpecialProducts($booth_id);
	    } else { // Khởi tạo các giá trị ban đầu khi add
	        $data['booth'] = array(
	        	'id' => '',
	            'user_id' => '',
	         	'slug' => '',
	            'category_id' => '', // Chuyên mục
	            'name' => '',    // Tên gian hàng
	            'address' => '',          // Địa chỉ
	            'tel' => '',     // Điện thoại
	            'fax' => '',  // Fax
	            'email' => '',  // Email
	            'website' => '',  // Website
	            'hotline' => '',  // Hotline
	            'avatar' => '',  // Sửa ảnh đại diện
	        	'logo' => '',
	            'banner_large' => '', // Thay đổi ảnh bìa
	            'banner_small_1' => '', // Thay đổi banner 1
	            'banner_small_2' => '', // Thay đổi banner 2
	        	'lat' => '',   
	        	'lng' => '',
	            'create_date' => '',
	            'social1' => '',
	            'social2' => '',
	            'social3' => '',
	            'social4' => '',
	         );
	    }    
	    
	    if (isset($_POST['booth-submit'])) {
	        unset($_POST['booth-submit']);
    	    $this->form_validation->set_rules('category_id', 'Chuyên mục', 'trim|xss_clean');
	    } else if (isset($_POST['social-submit'])) {
	        unset($_POST['social-submit']);
	        if (isset($_POST['social1'])) {
	            $this->form_validation->set_rules('social1', '', 'trim|xss_clean');
	        } else if (isset($_POST['social2'])) {
	            $this->form_validation->set_rules('social2', '', 'trim|xss_clean');
	        } else if (isset($_POST['social3'])) {
	            $this->form_validation->set_rules('social3', '', 'trim|xss_clean');
	        } else if (isset($_POST['social4'])) {
	            $this->form_validation->set_rules('social4', '', 'trim|xss_clean');
	        }
	    } else if (isset($_POST['link-submit'])) {
	        unset($_POST['link-submit']);
	        if (isset($_POST['link1'])) {
	            $this->form_validation->set_rules('link1', '', 'trim|xss_clean');
	        } else if (isset($_POST['link2'])) {
	            $this->form_validation->set_rules('link2', '', 'trim|xss_clean');
	        } else if (isset($_POST['link3'])) {
	            $this->form_validation->set_rules('link3', '', 'trim|xss_clean');
	        }
	    }
	    
		if ($this->form_validation->run() == FALSE) { // not validate form 
		  	$this->_data['content'] = $this->load->view('booth/add', $data, true);
  	      	$this->load->view('layout/frontend/index', $this->_data);
  	      	return FALSE;
	  	} else {
	  	    $_POST['user_id'] = (int) $_SESSION['userLoggedIn']['id'];
	  	    
	  	    if (isset($_POST['category_id'])) {
	  	      $this->load->helper('controller');
	  	    
	  	      $_POST['slug'] = generalSlug($_POST['name']);
	  	    }
	  	    
	  	    if (isset($booth_id)) {
                $this->boothmodel->update($booth_id, $_POST);
	  	  	    $this->session->set_flashdata('message', 'Đã thay đổi thành công!');
    	  	} else {
    	  	    $insertId = $this->boothmodel->add($_POST);
	  	  	    $this->session->set_flashdata('message', 'Đã thêm mới thành công!');
    	  	}
	  	  	redirect('booth/add');
	  	  	return TRUE;
	  	}
	}
	
	public function addMap()
	{
	  $this->load->library(array('form_validation'));
	  if ($_POST['id']) {
	    $id = (int) $_POST['id'];
	  }
	
	  $this->form_validation->set_rules('lat', 'Vị trí không hợp lệ', 'trim|required|decimal');
	  $this->form_validation->set_rules('lng', 'Vị trí không hợp lệ', 'trim|required|decimal');
	
	  if ($this->form_validation->run() == FALSE) { // not validate form
	    $this->_data['content'] = $this->load->view('booth/add', $data, true);
	    $this->load->view('layout/frontend/index', $this->_data);
	    return FALSE;
	  } else {
	    if (isset($id)) {
	      $this->boothmodel->update($id, $_POST);
	      $this->session->set_flashdata('message', 'Đã thay đổi thành công!');
	    } else {
	      $this->boothmodel->add($_POST);
	      $this->session->set_flashdata('message', 'Đã thêm mới thành công!');
	    }
	  	redirect('booth/add');
	  	return TRUE;
	  }
	}
	
	/**
	 * Ajax upload to temp
	 *
	 * @return string list file upload
	 */
	public function ajaxUploadFile($type, $id = NULL)
	{
	    $fn = (isset($_SERVER['HTTP_X_FILENAME']) ? $_SERVER['HTTP_X_FILENAME'] : false);
	    if ($fn) {
	        // made dir
            $dir = 'upload/booth/' . $_SESSION['userLoggedIn']['id'] . '/' . $type;
            if (!file_exists($dir)) {
                $old = umask(0);
                @mkdir($dir, 0777, true);
                umask($old);
            }
            
    	    file_put_contents(
    	        $dir . '/' . $fn,
    	        file_get_contents('php://input')
    	    );
    	    
    	    $data = array(
    	        $type     => $fn, 
    	    	'user_id' => $_SESSION['userLoggedIn']['id']
    	    );
    	    
    	    $booth = $this->boothmodel->getBoothByUserId($_SESSION['userLoggedIn']['id']);
    	    
	    	if ($id) {
                $this->boothmodel->update((int) $id, $data);
    	  	} elseif ($booth) { 
    	  	    $this->boothmodel->update($booth['id'], $data);
    	  	} else {
    	  	    $this->boothmodel->add($data);
    	  	}
    	    
    	    echo "$fn uploaded";
    	    exit();
	    }
	}	
	
	/**
	 * Ajax popup categories
	 */
	public function categories()
	{
	  $this->load->view('booth/categories');
	}
}